#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<cstring>
#include<string>

using namespace std;

//int main()
//{
//    scanf("%s", s1);
//    scanf("%s", s2);
//    char* res = strstr(s1, s2);
//    if (res == NULL) cout << 0;
//    else
//    {
//        cout << res - s1 + 1;
//    }
//    return 0;
//}
// 
//const int N = 10010;
//int a[N];
//bool st[N];
//int n, m;
//
//bool check()
//{
//    int cnt = 0;
//    for (int i = 0; i < n; i++)
//    {
//        if (!st[i]) cnt++;
//    }
//    return cnt == 0;
//}
//
//int main()
//{
//    scanf("%d%d", &n, &m);
//    for (int i = 0; i < n; i++)
//    {
//        a[i] = i + 1;
//    }
//    int i = 0,cnt = 0;
//    while (!check())
//    {
//        while (cnt < m)
//        {
//            if (i >= n) i %= n;
//            if (!st[i])
//            {
//                cnt++; 
//            }
//            i++;
//        }
//        cnt = 0;
//        m++;
//        st[i - 1] = true;
//        printf("%d ", a[i - 1]);
//    }
//    return 0;
//}


#include<queue>

typedef pair<int, int> PII;

#define x first
#define y second

const int N = 1010;
bool st1[N][N], st2[N][N];
int w, h;
int cnt = 0;

int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };

void bfs(int a, int b)
{
    queue<int> q;
    q.push(a);
    q.push(b);
    while (q.size())
    {
        int x1 = q.front();
        q.pop();
        int y1 = q.front();
        q.pop();
        for (int i = 0; i < 4; i++)
        {
            int x = x1 + dx[i];
            int y = y1 + dy[i];
            if (x<=0 || y<=0 || x>w || y>h) continue;
            if (st1[x][y]) continue;
            st1[x][y] = true;
            for (int i = 0; i < 4; i++)
            {
                int x2 = x1 + dx[i] * 2;
                int y2 = y1 + dy[i] * 2;
                if (x2<=0 || y2<=0 || x2>w || y2>h) continue;
                st2[x2][y2] = true;
            }
            if(!st2[x][y])
            cnt++;
            q.push(x);
            q.push(y);
        }
    }
}

int main()
{
    scanf("%d%d", &w, &h);
    bfs(1, 1);
    printf("%d", cnt);
}


//bool check(char c)
//{
//    if (c <= '9' && c >= '0') return true;
//    else return false;
//}
//
//int StrToInt(string str) {
//    int num = 0;
//    bool flag = true;
//    int i = 0;
//    if (str[i] == '-')
//    {
//        i++;
//        flag = false;
//    }
//    else if (str[i] == '+')
//    {
//        i++;
//    }
//    while (i < str.size())
//    {
//        if (check(str[i]))
//        {
//            num *= 10;
//            num += str[i] - '0';
//        }
//        else return 0;
//        i++;
//    }
//    if (!flag) num = -num;
//    return num;
//}
//
//int main()
//{
//    string s;
//    getline(cin, s);
//    StrToInt(s);
//}